// 用户相关的小仓库
import { defineStore } from 'pinia'
import { ElMessageBox } from "element-plus";
import { loginMobil, loginEmail, registerMobile, registerEmail, getUserInfoMy } from '@/api/api'
import { Session, Local } from '@/api/storage.ts';
import type { IUserInfo } from '@/types/view/user';

// 创建用户小仓库
let useUserStore = defineStore('user', {
  state: () => {
    return {
      token: Session.get('token') as string,
      userInfo: Session.get('userInfo') as IUserInfo
    }
  },
  getters: {
    gUserInfo: state => state.userInfo
  },
  actions: {
    getUserInfo() {
      return new Promise((resolve, reject) => {
        getUserInfoMy().then((res:any) => {
          if(res.errCode === 0){
            Session.set('userInfo', res.returnData)
            this.$state.userInfo = res.returnData
            resolve(res.returnData)
          } else {
            reject(res.message)
          }
        })
      })
    },
    // 登录
    login(indexOf: string, state: any) {
      return new Promise((resolve, reject) => {
        if(indexOf === '0'){
          loginEmail({...state.emailObj}).then((res:any) => {
            if(res.errCode === 0){
              Session.set('token', res.returnData.accessToken)
              Session.set('userInfo', res.returnData.userInfo)
              this.$state.userInfo = res.returnData.userInfo
              resolve(res.returnData)
            } else {
              reject(res.message)
            }
          })
        } else {
          loginMobil(state.mobile).then((res:any) => {
            if(res.errCode === 0){
              Session.set('token', res.returnData.accessToken)
              Session.set('userInfo', res.returnData.userInfo)
              this.$state.userInfo = res.returnData.userInfo
              resolve(res.returnData)
            } else {
              reject(res.message)
            }
          })
        }
      })
    },
    // 注册
    signIn(indexOf: string, state: any) {
      if(indexOf === '0'){
        if(state.emailObj.password === state.agnPassword){
          registerEmail({...state.emailObj}).then((res:any) => {
            if(res.errCode === 0){
              state.dialogTableVisible = true
            } else {
              ElMessageBox.alert('Номер счета зарегистрирован', 'предъявлять', {}).then(() => {})
            }
          })
        } else {
          ElMessageBox.alert('Два непоследовательных ввода пароля', 'предъявлять', {}).then(() => {})
        }
      } else {
        registerMobile({ ...state.mobile }).then((res:any) => {
          if(res.errCode === 0){
            state.dialogTableVisible = true
          } else {
            ElMessageBox.alert('Номер счета зарегистрирован', 'предъявлять', {}).then(() => {})
          }
        })
      }
    }
  }
})

// 暴露
export default useUserStore